【CDI】InformaticaでソースデータをリクエストパラメータとしてSOAP APIを実行して、レスポンスをデータ連携する
はじめに
こんにちは、データアナリティクス事業本部の渡部です。
今回はSOAP APIをInformaticaのCloud Data Integration(以降、CDI)で呼び出し、S3にデータ出力するマッピングを作成してみます。
SOAP APIはCloud Application Integration(以降、CAI)で作成したプロセスを使用します。
実現すること
以下のようなマッピングを作成します。
S3のソースデータを元にAPIを実行し、そのレスポンスをS3に書き込みます。
S3のCSVファイルの中身は以下です。
(データ内容は目を瞑ってもらえればと思います・・)
id,name,age 1,watanabe,78 2,42,54 3,kura,13
APIのソーステーブルについては、抜粋となりますが以下のような定義・データとなります。
CREATE TABLE infa.users ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, age INT, address TEXT ); INSERT INTO users (id, name, age, address) VALUES (1, '山崎 加奈', 56, '香川県新宿区下吉羽41丁目20番3号 クレスト上高野359'); INSERT INTO users (id, name, age, address) VALUES (2, '鈴木 結衣', NULL, '和歌山県川崎市多摩区四番町4丁目1番13号 脚折町ハイツ979'); INSERT INTO users (id, name, age, address) VALUES (3, '小林 太一', NULL, '和歌山県文京区丸の内20丁目9番13号 シャルム氏家新田132'); INSERT INTO users (id, name, age, address) VALUES (4, '山下 洋介', 51, '沖縄県山武郡芝山町湯宮9丁目5番5号 前弥六コーポ806');
やってみる
CAIプロセスの準備
APIの処理はRDSからリクエストパラメータとして渡したidに一致するレコードを取得するものです。
以下ブログで作成したものを使用しています。
WebService Consumer コネクタの作成
SOAP APIのエンドポイントとWSDLファイルのURLを設定して、SOAP APIの定義と接続を設定します。
以下のとおり設定しました。
今回の検証用に認証はOther Authentication
を選択して、ユーザー・パスワードは指定せずに、APIには匿名接続とします。
他の認証として、Username Token
やNtlm Authentication
については以下のとおりの設定欄となります。
詳しくはこちらのインフォマティカドキュメントをご参考ください。
Web Service Consumer Connector
CDIでビジネスサービスの作成
CDIのマッピングでAPIを呼ぶには、後述のWebサービストランスフォーメーションが必要となりますが、
そのためには、ビジネスサービスでAPIの操作の定義をする必要があります。
新規
> ビジネスサービス
で作成をします。
そのあと、コネクタ作成時にWSDLを定義しているので、そこから読み込んだ操作を選択します。
CDIでマッピングを作成する
改めてマッピングは以下のようになります。
肝心のAPIはWebサービストランスフォーメーションで呼んでいます。
ビジネスサービスとその操作は、先ほど作成したものを選択します。
次に要求マッピングで、APIのリクエスト構造体にソースS3の項目をマッピングします。
左側が受信フィールド、右側がリクエスト構造体となります。
今回はid
同士を連携しました。
次に応答マッピングです。
左側がAPIとしての応答構造、右側がWebサービストランスフォーメーションとして出力するフィールドになります。
出力したい要素としてresponse
配下を選択しました。
自動的にEnvelope
が右側に反映されます。
あとはターゲットにトランスフォーメーションがリンクされていないので、リンクします。
その際に後続に連携したいレスポンスが表示されるので、Envelope
を選択します。
あとは他のトランスフォーメーションの設定をすれば作成完了です。
まとめ
上記のマッピングを実行すると、以下のとおりデータが出力されました。
ソースデータのid={1,2,3}
に対して、データが出力されています。
"id","name","age","address" "1","山崎 加奈","56","香川県新宿区下吉羽41丁目20番3号 クレスト上高野359" "2","鈴木 結衣","","和歌山県川崎市多摩区四番町4丁目1番13号 脚折町ハイツ979" "3","小林 太一","","和歌山県文京区丸の内20丁目9番13号 シャルム氏家新田132"
以上、SOAP APIをCDIで呼ぶ方法でした。
参考になれば幸いです。